package jmini.iservice;

import java.util.List;

import jmini.dto.Pagination;
import jmini.modules.Module;

public interface IMiniService extends IMyService{
	
	/**
	 * 添加数据
	 * @param obj
	 * @return
	 * @throws IllegalAccessException 
	 * @throws IllegalArgumentException 
	 */
	public String save(Module model);
	
	/**
	 * 删除数据
	 * @param model
	 */
	public void delete(Module model);
	
	/**
	 * 修改数据
	 * @param model
	 */
	public void update(Module model);
	
	/**
	 * 修改数据
	 * @param model
	 */
	public void update(Module model, String... fieldNames);
	
	/**
	 * 通过id查询模型数据
	 * @param id
	 * @param type
	 * @return
	 */
	public <T> T query(String id , Class<T> requiredType);
	
	/**
	 * 根据条件查询Model数据
	 * @param whereStr
	 * @param orderStr
	 * @param requiredType
	 * @param args
	 * @return
	 */
	public <T> List<T> queryList(String whereStr, String orderStr, Class<T> requiredType, Object... args);
	
	/**
	 * 根据条件查询Model数据
	 * @param whereStr
	 * @param orderStr
	 * @param requiredType
	 * @param args
	 * @return
	 */
	public <T> T queryOne(String whereStr, String orderStr, Class<T> requiredType, Object... args);
	
	/**
	 * 单表分页查询
	 * @param p
	 * @param requiredType
	 * @param whereStr
	 * @param orderStr
	 * @param args
	 */
	public void queryByPage(Pagination p, String whereStr, String orderStr, @SuppressWarnings("rawtypes") Class requiredType, Object... args);
	
	/**
	 * 自定义SQL分页查询
	 * @param p
	 * @param requiredType
	 * @param whereStr
	 * @param orderStr
	 * @param args
	 */
	public void queryBySQLPage(Pagination p, String countSQLStr, String sqlStr, String whereStr, String orderStr, @SuppressWarnings("rawtypes") Class requiredType, Object... args);
	
	/**
	 * 使用countSQLStr统计记录数
	 * @param countSQLStr
	 * @param whereStr
	 * @param args
	 * @return
	 */
	public Integer countData(String countSQLStr, Object... args);
	
	/**
	 * 使用countSQLStr对单列数据进行求和
	 * @param countSQLStr
	 * @param whereStr
	 * @param args
	 * @return
	 */
	public Double sumData(String countSQLStr, Object... args);
	
	/**
	 * 通过SQL语句更新数据
	 * @param sql
	 * @param args
	 * @return
	 */
	public int updateBySQL(String sql, Object... args);
	
}
